﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web;
using ProyectoAlmacen.Persistencia;
using ProyectoAlmacen.Models;
using ProyectoAlmacen.Persistencia.NH;
using System.Messaging;
using System.Net;
using System.Text;
using System.IO;
using System.Web.Script.Serialization;

namespace ProyectoAlmacen.Negocio
{
    public class ProveedorServiceImpl : IProveedorService
    {
        public static string cadenaError = "";
        //#region Dependencias
        //public string validacionProveedor = "";
        //IProveedorDAO proveedorDAO = new ProveedorDAO();

        //#endregion

        //#region Operaciones del Negocio

        //public Proveedor CrearProveedor(int idProveedor, string RucDni, string NombreRazon, int Estado, int idUsuario)
        //{
        //    Proveedor proveedorACrear = new Proveedor();
        //    proveedorACrear.idProveedor = idProveedor;
        //    proveedorACrear.RucDni = RucDni;
        //    proveedorACrear.NombreRazon = NombreRazon;
        //    proveedorACrear.Estado = Estado;
        //    proveedorACrear.idUsuario = idUsuario;
        //    return proveedorDAO.Crear(proveedorACrear);

        //}

        //public Proveedor EditarProveedor(int idProveedor, string RucDni, string NombreRazon, int Estado, int idUsuario)
        //{
        //    Proveedor proveedorAEditar = new Proveedor();
        //    proveedorAEditar.idProveedor = idProveedor;
        //    proveedorAEditar.RucDni = RucDni;
        //    proveedorAEditar.NombreRazon = NombreRazon;
        //    proveedorAEditar.Estado = Estado;
        //    proveedorAEditar.idUsuario = idUsuario;

        //    return proveedorDAO.Modificar(proveedorAEditar);

        //}

        //public void EliminarProveedor(Proveedor proveedor)
        //{

        //    proveedorDAO.Eliminar(proveedor);

        //}

        //#endregion

        //#region Métodos de soporte para entidad proveedor
        public Proveedor ObtenerProveedor(int codigo)
        {
            HttpWebRequest req2 = (HttpWebRequest)WebRequest
            .Create("http://localhost:51063/Proveedores.svc/Proveedores/" + codigo.ToString());
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string proveedorJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            Proveedor model = js2.Deserialize<Proveedor>(proveedorJson2);
            return model;
            

        }

        public ICollection<Proveedor> ListarProveedor()
        {
            try
            {

                string rutaCola = @".\private$\jvasquez";
                if (MessageQueue.Exists(rutaCola))
                {

                    MessageQueue cola = new MessageQueue(rutaCola);
                    Message mensaje = new Message();
                    cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Proveedor) });
                    Message[] msgs = cola.GetAllMessages();
                    if (msgs.Length > 0)
                    {


                        foreach (Message msg in msgs)
                        {
                            if (msg.Label == "Insert Proveedor")
                            {
                                Proveedor proveedor = (Proveedor)msg.Body;
                                string postdata = "{\"idProveedor\":\"" + proveedor.idProveedor.ToString() + "\",\"RucDni\":\"" + proveedor.RucDni + "\",\"NombreRazon\":\"" + proveedor.NombreRazon + "\",\"Estado\":\"" + proveedor.Estado.ToString() + "\",\"idUsuario\":\"" + proveedor.idUsuario.ToString() + "\"}";
                                byte[] data = Encoding.UTF8.GetBytes(postdata);
                                HttpWebRequest req = (HttpWebRequest)WebRequest
                                    .Create("http://localhost:51063/Proveedores.svc/Proveedores");
                                req.Method = "POST";
                                req.ContentLength = data.Length;
                                req.ContentType = "application/json";
                                var reqStream = req.GetRequestStream();
                                reqStream.Write(data, 0, data.Length);
                                var res = (HttpWebResponse)req.GetResponse();

                            }
                            else if (msg.Label == "Delete Proveedor")
                            {
                                Proveedor proveedor = (Proveedor)msg.Body;
                                HttpWebRequest req4 = (HttpWebRequest)WebRequest
                                     .Create("http://localhost:51063/Proveedores.svc/Proveedores/" + proveedor.idProveedor.ToString());
                                req4.Method = "DELETE";
                                HttpWebResponse res4 = (HttpWebResponse)req4.GetResponse();
                                StreamReader reader4 = new StreamReader(res4.GetResponseStream());

                            }
                            else if (msg.Label == "Update Proveedor")
                            {
                                Proveedor proveedor = (Proveedor)msg.Body;
                                string postdata = "{\"idProveedor\":\"" + proveedor.idProveedor.ToString() + "\",\"RucDni\":\"" + proveedor.RucDni + "\",\"NombreRazon\":\"" + proveedor.NombreRazon + "\",\"Estado\":\"" + proveedor.Estado.ToString() + "\",\"idUsuario\":\"" + proveedor.idUsuario.ToString() + "\"}";
                                byte[] data = Encoding.UTF8.GetBytes(postdata);
                                HttpWebRequest req = (HttpWebRequest)WebRequest
                                    .Create("http://localhost:51063/Proveedores.svc/Proveedores");
                                req.Method = "PUT";
                                req.ContentLength = data.Length;
                                req.ContentType = "application/json";
                                var reqStream = req.GetRequestStream();
                                reqStream.Write(data, 0, data.Length);
                                var res = (HttpWebResponse)req.GetResponse();
                            }



                        }
                        cola.Receive();



                    }


                }

                HttpWebRequest req2 = (HttpWebRequest)WebRequest
                .Create("http://localhost:51063/Proveedores.svc/Proveedores");
                req2.Method = "GET";
                HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
                StreamReader reader2 = new StreamReader(res2.GetResponseStream());
                string proveedorJson2 = reader2.ReadToEnd();
                JavaScriptSerializer js2 = new JavaScriptSerializer();
                ICollection<Proveedor> model = js2.Deserialize<ICollection<Proveedor>>(proveedorJson2);
                cadenaError = "";
                return model;

            }
            catch (WebException e)
            {
                HttpWebResponse resError = (HttpWebResponse)e.Response;
                StreamReader readerError = new StreamReader(resError.GetResponseStream());
                string mensajeError = readerError.ReadToEnd();
                JavaScriptSerializer jsError = new JavaScriptSerializer();
                Error mensajeObtenido = jsError.Deserialize<Error>(mensajeError);
                cadenaError = mensajeObtenido.Mensaje;

                string rutaCola = @".\private$\jvasquez";
                MessageQueue cola = new MessageQueue(rutaCola);
                cola.Receive();

                HttpWebRequest req2 = (HttpWebRequest)WebRequest
                .Create("http://localhost:51063/Proveedores.svc/Proveedores");
                req2.Method = "GET";
                HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
                StreamReader reader2 = new StreamReader(res2.GetResponseStream());
                string proveedorJson2 = reader2.ReadToEnd();
                JavaScriptSerializer js2 = new JavaScriptSerializer();
                ICollection<Proveedor> model = js2.Deserialize<ICollection<Proveedor>>(proveedorJson2);
                return model;
            
            
            }
            

        }
        //#endregion
    }
}